#ifndef _RENZO_PLUGIN_
#define _RENZO_PLUGIN_

/*
@description
Plugin defines a generic interface for all DLL plugins to extend Renzoderer features
Plugin is also used to implement the render system OpenGL and Direct3D in Renzoderer
*/
namespace Renzo {
class Plugin
{
public:
	Plugin(void) {}
	virtual ~Plugin(void) {}

public:
	/**
	Return the plugin name
	*/
	virtual const char* getName() const = 0;

	/**
	Register necessary objects provided by the plugin to Renzoderer
	*/
	virtual void install() = 0;

	/**
	Remove registered objects provided by the plugin out of Renzoderer
	*/
	virtual void uninstall() = 0;

	/**
	Start this plugin after installation.
	*/
	virtual void begin() = 0;

	/**
	End this plugin before uninstallation.
	*/
	virtual void end() = 0;
};
}
#endif